//#include <iostream>
//using namespace std;
//
//int n, k;
//
//int main()
//{
//	cin >> n >> k;
//	cout << k - (n % k) << endl;
//	return 0;
//}


//#include <iostream>
//using namespace std;
//
//const int N = 1e5 + 10;
//
//int a[N] = { 0 };
//
//int n;
//
//int main()
//{
//	cin >> n;
//	int cnt = 0;
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i];
//		if (a[i] == i)
//		{
//			cnt++;
//		}
//	}
//
//	if (cnt == n)
//	{
//		cout << cnt << endl;
//		return 0;
//	}
//
//	bool flag = 0;
//	for (int i = 0; i < n; i++)
//	{
//		if (a[i] != i && a[a[i]] == i)
//		{
//			flag = 1;
//			break;
//		}
//	}
//
//	if (flag)
//	{
//		cnt++;
//	}
//
//	cout << cnt + 1 << endl;
//
//	return 0;
//}



//#include <iostream>
//#include <string>
//using namespace std;
//
//const int N = 25;
//
//string s[N];
//int cnt[N] = { 0 };
//int ret = 0;
//
//int n;
//
//void dfs(string x)
//{
//	ret = max((int)x.size(), ret);
//
//	for (int i = 1; i <= n; i++)
//	{
//		if (cnt[i] >= 2)
//			continue;
//
//		int cur1 = x.size() - 1;
//		int cur2 = 0;
//
//		while (cur1 > 0 && cur2 < s[i].size() - 1)
//		{
//			if (x.substr(cur1) == s[i].substr(0, cur2 + 1))
//			{
//				cnt[i]++;
//				dfs(x + s[i].substr(cur2 + 1));
//				cnt[i]--;
//			}
//			cur1--;
//			cur2++;
//		}
//
//	}
//}
//
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> s[i];
//	}
//	char ch;
//	cin >> ch;
//
//	for (int i = 1; i <= n; i++)
//	{
//		if (s[i][0] == ch)
//		{
//			cnt[i]++;
//			dfs(s[i]);
//			cnt[i]--;
//		}
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}



#include <iostream>
using namespace std;

typedef long long ll;

const int N = 110;

ll a[2 * N] = { 0 };
ll f[2 * N][2 * N] = { 0 };
int n;

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		a[i + n] = a[i];
	}

	for (int i = 1; i < 2 * n; i++)
	{
		f[i][i] = 0;
	}

	for (int len = 2; len <= n; len++)
	{
		for (int i = 1; i + len - 1 < 2 * n; i++)
		{
			int j = i + len - 1;
			//[i k] [k + 1 j]
			for (int k = i; k < j; k++)
			{
				f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j] + a[i] * a[k + 1] * a[j + 1]);
			}
		}
	}


	ll ret = 0;
	for (int i = 1; i <= n; i++)
	{
		ret = max(ret, f[i][i + n - 1]);
	}

	cout << ret << endl;
	
	return 0;
}